package stack_queue.leetcode;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 双队列实现栈
 **/
public class Num225 {
    // q1是存储元素的队列
    private Queue<Integer> q1 = new LinkedList<>();
    // q2是辅助队列，添加元素后保证q2永远为空
    private Queue<Integer> q2 = new LinkedList<>();

    public Num225() {

    }

    public void push(int x) {
        // 新元素直接入q2,新元素就处在q2的队首
        q2.offer(x);
        // 将q1中的所有元素依次出队入q2
        while (!q1.isEmpty()) {
            q2.offer(q1.poll());
        }
        // q1为空，q2为存储元素的队列，互换引用的指向
        // 互换指向之后仍然保证q1是存储元素的队列，q2为空
        Queue<Integer> temp = q1;
        q1 = q2;
        q2 = temp;
    }

    public int pop() {
        return q1.poll();
    }

    public int top() {
        return q1.peek();
    }

    public boolean empty() {
        return q1.isEmpty();
    }
}


